package com.wonders.hisdoctor.station.project.medicine.mapper;

import com.wonders.hisdoctor.station.project.base.domain.OutpPresc;
import com.wonders.hisdoctor.station.project.hisqueue.vo.ClinicMasterQueryVo;
import com.wonders.hisdoctor.station.project.medicine.vo.*;
import com.wonders.hisdoctor.station.project.record.vo.DrugListVo;
import com.wonders.hisdoctor.station.project.record.vo.QuotePrescLeftVo;
import com.wonders.hisdoctor.station.project.record.vo.QuotePrescVo;
import com.wonders.hisdoctor.station.project.record.vo.SuppliesVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author 张澎_9970
 * @date 2021/1/25 10:34 星期一
 * @desc:
 */
@Mapper
@Repository
public interface MedicineMapper {
    /**
     * 查询 处方及明细
     *
     * @param patientId 病人ID
     * @param visitDate 就诊日期
     * @param visitNo   就诊序号
     * @Param empNo     医生编号
     * @return List<OutpOrders>
     */
    List<PrescriptionVO> queryPrescriptions(String patientId, Date visitDate, Integer visitNo, String empNo, Integer isHistory);

    /**
     *  医嘱名称下拉列表
     * @param drugNames
     * @param hospitalCode
     * @param types
     * @param rowNum
     * @param storages
     * @param expireRangeDays
     * @return
     */
    List<DrugListVo> drugList(List<String> drugNames, String hospitalCode, List<String> types, int rowNum,List<String> storages,int expireRangeDays);

    /**
     * 查询 处方及明细
     * @param qryPresVO 入参
     * @return List<PresVO>
     */
    List<PrescriptionVO> qryPres(QryPresVO qryPresVO);

    /**
     * 耗材下拉框
     *
     * @param drugName     耗材名称
     * @param hospitalCode 机构代码
     * @param type         药品类型
     * @return List<SuppliesVo>
     */
    List<SuppliesVo> supplier(String drugName, String hospitalCode, String type);

    /**
     * 引用处方
     *
     * @param empNo     人员编号
     * @param patName   患者姓名
     * @param visitDate 就诊日期
     * @return List<OutpPresc>
     */
    List<QuotePrescVo> quotePrescription(String empNo, String patName, Date visitDate);

    /**
     * 引用处方_左列表
     *
     * @param empNo     人员编号
     * @param patName   患者姓名
     * @param startDate 开始日期
     * @param endDate   结束日期
     * @return List<QuotePrescLeftVo>
     */
    List<QuotePrescLeftVo> quotePrescLeft(String empNo, String patName, Date startDate, Date endDate);

    /**
     * 治疗单打印_查询_基础信息
     *
     * @param treatPrintVo 入参
     * @return OutpOrderVo
     */
    OutpOrderVo queryOutpOrder(TreatPrintVo treatPrintVo);

    /**
     * 治疗单打印_查询_处方信息
     *
     * @param treatPrintVo 入参
     * @return List<OutpPrescVo>
     */
    List<OutpPrescVo> queryPrescs(TreatPrintVo treatPrintVo);

    /**
     * 库存总数
     *
     * @param prescVo
     * @return BigDecimal
     */
    BigDecimal getTotal(PrescriptionVO prescVo);

    /**
     * 获取已被开出的药
     *
     * @param prescVo 入参
     * @return BigDecimal
     */
    BigDecimal getFrozenQuantity(PrescriptionVO prescVo);

    /**
     * Description: 根据patientId查询改病人服用过特定药的处方明细历史数据
     * Param: [list, patientId, serialNo]
     * return: java.util.List<com.wonders.hisdoctor.station.project.base.domain.OutpPresc>
     * Author: tong-aj
     * Date: 2021/3/15
     */
    List<OutpPresc> findLastDrugUseInfo(@Param("list") List<Map<String, String>> list, @Param("patientId") String patientId);

    List<QueryPrescStatusVO> queryPrescStatus(List<OutpPresc> outpPrescs);

    List<ClinicMasterQueryVo> qryClinic(QryClinicVO qryClinicVO);

    /**
     * 根据剂型获取给药方式
     * @param drugCode
     * @param drugSpec
     * @return
     */
    Map<String, String> getAdminByForm(String drugCode, String drugSpec);
}
